package com.example.calculator;

import android.media.AudioManager;
import android.media.SoundPool;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
import android.text.format.DateFormat;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class MainActivity extends Activity implements OnClickListener{
	
	
	public Button btn_clear_music=null;
	public Button btn_del_music=null;
    private SoundPool sp1;//声明一个SoundPool
    private SoundPool sp2;
    private int music1;//定义一个整型用load（）；来设置suondID
    private int music2;
    
    
    private static final int msgKey1 = 1;
    private TextView mTime;
    
	
	
    Button btn_0;
    Button btn_1;
    Button btn_2;
    Button btn_3;
    Button btn_4;
    Button btn_5;
    Button btn_6;
    Button btn_7;
    Button btn_8;
    Button btn_9;
    Button btn_point;
    Button btn_clear;
    Button btn_del;
    Button btn_plus;
    Button btn_minus;
    Button btn_multiply;
    Button btn_divide;
    Button btn_equle;
    EditText et_input;
    boolean clear_flag;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        //在Activity的onCreate方法中开启这个线程
        mTime = (TextView) findViewById(R.id.mytime);
        new TimeThread().start();
        
        
        
        
        btn_0=(Button) findViewById(R.id.btn_0);
        btn_1=(Button) findViewById(R.id.btn_1);
        btn_2=(Button) findViewById(R.id.btn_2);
        btn_3=(Button) findViewById(R.id.btn_3);
        btn_4=(Button) findViewById(R.id.btn_4);
        btn_5=(Button) findViewById(R.id.btn_5);
        btn_6=(Button) findViewById(R.id.btn_6);
        btn_7=(Button) findViewById(R.id.btn_7);
        btn_8=(Button) findViewById(R.id.btn_8);
        btn_9=(Button) findViewById(R.id.btn_9);
        btn_point=(Button) findViewById(R.id.btn_point);
        btn_clear=(Button) findViewById(R.id.btn_clear);
        btn_del=(Button) findViewById(R.id.btn_del);
        btn_plus=(Button) findViewById(R.id.btn_plus);
        btn_minus=(Button) findViewById(R.id.btn_minus);
        btn_multiply=(Button) findViewById(R.id.btn_multiply);
        btn_divide=(Button) findViewById(R.id.btn_divide);
        btn_equle=(Button) findViewById(R.id.btn_equal);
        et_input=(EditText) findViewById(R.id.et_input);
        
        
        
        btn_0.setOnClickListener(this);
        btn_1.setOnClickListener(this);
        btn_2.setOnClickListener(this);
        btn_3.setOnClickListener(this);
        btn_4.setOnClickListener(this);
        btn_5.setOnClickListener(this);
        btn_6.setOnClickListener(this);
        btn_7.setOnClickListener(this);
        btn_8.setOnClickListener(this);
        btn_9.setOnClickListener(this);
        btn_point.setOnClickListener(this);
        btn_del.setOnClickListener(this);
        btn_divide.setOnClickListener(this);
        btn_equle.setOnClickListener(this);
        btn_minus.setOnClickListener(this);
        btn_multiply.setOnClickListener(this);
        btn_plus.setOnClickListener(this);
        btn_clear.setOnClickListener(this);
        
        init1();
        init2();
        
        
       
        
                
        
        
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }


	@Override
	public void onClick(View v) {
		// TODO Auto-generated method stub
		
		
		String str=et_input.getText().toString();
		switch (v.getId()) {
		case R.id.btn_0:
		case R.id.btn_1:
		case R.id.btn_2:
		case R.id.btn_3:
		case R.id.btn_4:
		case R.id.btn_5:
		case R.id.btn_6:
		case R.id.btn_7:
		case R.id.btn_8:
		case R.id.btn_9:
		case R.id.btn_point:
			if (clear_flag) {
				  
				clear_flag=false;
				str="";
				et_input.setText("");
			}
		    et_input.setText(str+((Button)v).getText());
		    
			break;
		
		case R.id.btn_plus:
		case R.id.btn_divide:
		case R.id.btn_multiply:
		case R.id.btn_minus:
			if (clear_flag) {
				
				clear_flag=false;
				str="";
				et_input.setText("");
			}
			et_input.setText(str+" "+((Button)v).getText()+" ");
			break;
		case R.id.btn_clear:
			sp1.play(music1, 1, 1, 0, 0, 1);
			clear_flag=false;
			str="";
			et_input.setText("");
			
			break;
		case R.id.btn_del:
			sp2.play(music2, 1, 1, 0, 0, 1);
			if (clear_flag) {
				clear_flag=false;
				str="";
				et_input.setText("");
			}else if (str!=null&&!str.equals("")) {
				et_input.setText(str.substring(0, str.length()-1));
				
			}
			
			break;
		case R.id.btn_equal:
			getResult();
			break;
		}
		
	}
    private void getResult(){
    	String exp=et_input.getText().toString();
    	
    	if (exp==null||exp.equals("")) {
			return;
		}
    	if (!exp.contains(" ")) {
			return;
		}
    	if(clear_flag){
    		clear_flag=false;
    		return;
    	}
    	clear_flag=true;
    	double result=0;
    	String s1=exp.substring(0, exp.indexOf(" "));
    	String op=exp.substring(exp.indexOf(" ")+1,exp.indexOf(" ")+2);
    	String s2=exp.substring(exp.indexOf(" ")+3);
    	if(!s1.equals("")&&!s2.equals("")){
    		double d1=Double.parseDouble(s1);
    		double d2=Double.parseDouble(s2);
    		if(op.equals("+")){
    			result=d1+d2;
    		}else if(op.equals("-")){
    			result=d1-d2;
    		}else if(op.equals("×")){
    			result=d1*d2;
    		}else if(op.equals("÷")){
    			if(d2==0){
    				result=0;
    			}else{
    				result=d1/d2;
    			}
    		}
    		if(!s1.contains(".")&&!s2.contains(".")&&!op.equals("÷")){
    			int r=(int) result;
    			et_input.setText(r+"");
    		}else{
    			et_input.setText(result+"");
    		}
    	}else if(!s1.equals("")&&s2.equals("")){
    		et_input.setText(exp);
    	}else if(s1.equals("")&&!s2.equals("")){
    		double d2=Double.parseDouble(s2);
    		if(op.equals("+")){
    			result=0+d2;
    		}else if(op.equals("-")){
    			result=0-d2;
    		}else if(op.equals("×")){
    			result=0;
    		}else if(op.equals("÷")){
    			if(d2==0){
    				result=0;
    			
    			}
    		}
    		if(!s2.contains(".")){
    			int r=(int) result;
    			et_input.setText(r+"");
    		}else{
    			et_input.setText(result+"");
    		}
    	}else{
    		et_input.setText("");
    	}
    	}
    
    
    private void init1() {
    
    	btn_clear_music=(Button) findViewById(R.id.btn_clear);
        sp1= new SoundPool(10, AudioManager.STREAM_SYSTEM, 5);//第一个参数为同时播放数据流的最大个数，第二数据流类型，第三为声音质量
        music1 = sp1.load(this, R.drawable.clear, 1); //把声音素材放到res/drawable里，第2个参数即为资源文件，第3个为音乐的优先级
        btn_clear_music.setOnClickListener(this);
    
    }
    private void init2() {
        
    	btn_del_music=(Button) findViewById(R.id.btn_del);
        sp2= new SoundPool(10, AudioManager.STREAM_SYSTEM, 5);//第一个参数为同时播放数据流的最大个数，第二数据流类型，第三为声音质量
        music2 = sp2.load(this, R.drawable.del, 1); //把声音素材放到res/drawable里，第2个参数即为资源文件，第3个为音乐的优先级
        btn_del_music.setOnClickListener(this);
    
    }
    
    
    
    //写一个线程，线程里面无限循环，每隔一秒发送一个消息,其中由Handler来处理显示的结果
    public class TimeThread extends Thread {
    	         @Override
    	         public void run () {
    	             do {
    	                 try {
    	                     Thread.sleep(1000);
    	                     Message msg = new Message();
    	                     msg.what = msgKey1;
    	                     mHandler.sendMessage(msg);
    	                 }
    	                 catch (InterruptedException e) {
    	                     e.printStackTrace();
    	                 }
    	             } while(true);
    	         }
    	     }
    	 //向Handler中发消息，我们可以通过Handler来更新TextView的显示内容    
    	     private Handler mHandler = new Handler() {
    	         @Override
    	         public void handleMessage (Message msg) {
    	             super.handleMessage(msg);
    	             switch (msg.what) {
                       case msgKey1:
    	                     long sysTime = System.currentTimeMillis();
    	                     CharSequence sysTimeStr = DateFormat.format("hh:mm:ss", sysTime);
    	                     mTime.setText(sysTimeStr);
    	                     break;
    	                 
    	                 default:
    	                     break;
    	             }
    	         }
    	     };
    
    }

